import * as puppeteer from 'puppeteer-core';
import {installMouseHelper} from "./mouse-helper"

async function sleep(ms: number) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms);
  });
}

async function main() {
  // 启动浏览器
  const browser = await puppeteer.launch({
    executablePath: 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe',
    headless: false,
    // 这里要置为 null 否则会出现很小的 viewport
    defaultViewport: null,
    // 启动后浏览器窗口最大化
    args: ['--start-maximized'],
  });
  // 查询当前所有标签页

  const page = await browser.newPage();
  installMouseHelper(page);

  // 随便找了个网站，浏览器敲地址后回车
  await page.goto("https://www.hao123.com/");
  // 这里最好使用 await 等待某个 DOM 结构，我这里固定sleep
  await sleep(3 * 1000);
  // 留意这里 鼠标对象 每个页面都有独立的鼠标对象 不可混用
  const mouse = page.mouse;

  // 获取视口大小
  const r = await page.evaluate(() => {
    return {height: window.innerHeight, width: window.innerWidth};
  });
  if(!r) {
    console.warn('cannot get viewport size.');
    return;
  }
  // 将鼠标移动到视口中心位置
  await mouse.move(r.width/2, r.height/2, {steps: 10});

  // 滚动鼠标滚轮 滚 5 次
  for(let i=0; i!==5; i++) {
    await mouse.wheel({deltaY: 100})
    await sleep(0.5 * 1000);
  }

  // 点击鼠标 最好不要直接对 DOM 节点使用click
  // 而要使用鼠标定位 甚至是移动，移动到指定节点座标上 使用鼠标对象点击
  // 部分站点会有虚假的 DOM 干扰

  // 关闭浏览器
  await browser.close();
}

main();
